#property 方式一
# class Student:
#     def __init__(self,name,age ,height):
#         self.name = name
#         self.age =age
#         self.__height= height
#     @property    #这个装饰器的作用就是将方法 改变为属性
#     def height(self):
#         return self.__height
# zx = Student('张鑫',18,180)
# print (zx.name)
# print (zx.age)
# #print(zx.height) #通过属性名调用的方式无法访问
#
# #print (zx.get_height ()) #使用方法调用的方式，
# print (zx.height) #使用方法调用的方式，

# ------------------------------------------------------
#property 方式二  本身还是一个内置函数
class Student:
    def __init__(self,name,age ,height):
        self.name = name
        self.age =age
        self.__height= height

    def get_height(self):
        return self.__height

    def set_height(self,new_height):
        self.__height =new_height
        print(self.__height)

    def del_height(self):
        del self.__height
    #单独定义了一个属性叫height
    #property内置函数
    height = property(get_height,set_height,del_height)
zx = Student('张鑫',18,180)
print (zx.name)
print (zx.age)
#print(zx.height) #通过属性名调用的方式无法访问

#print (zx.get_height ()) #使用方法调用的方式，
print (zx.height) #使用属性调用的方式又可以调出属性值了
# zx.set_height(185)
zx.height = 185
del zx.height

print (zx.__dict__)